import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.HashSet;

import javax.swing.SwingConstants;
import javax.swing.JSeparator;
import javax.swing.JComboBox;

/**
 * Fenêtre de saisie d'un ouvrage 
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */
public class VueSaisieOuvrage extends Vue {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JPanel contentPane;
	private JTextField textFieldIsbn ;
	private JTextField textFieldTitre;
	private JTextField textFieldDate;
	private JTextField textFieldEditeur;
	
	private JButton buttonEnreg;
	private JButton buttonAnnuler;
	private JButton buttonEnregistrerAuteur;
	private JButton buttonEtapeSuivante;
	private JButton buttonEnregistrerMotCl;
	private JButton buttonFermer;
	
	private JTextField textFieldPrenomAuteur;
	private JTextField textFieldNomAuteur;
	
	private JLabel lblIsbn;
	private JLabel lblTitre;	
	private JLabel lblAuteur;
	private JLabel lblEditeur;
	private JLabel lblDate;
	private JLabel lblNom;
	private JLabel lblPrnom;
	private JLabel lblMotsCl;
	
	private JComboBox comboBoxMotCle;

	
	//Variables Globales
	String isbn;	
	String nomAuteur;
	String prenomAuteur;
	String motcle;
	
	/**
	 * Create the frame.
	 */
	public VueSaisieOuvrage(Controleur controleur) {
		super(controleur);
		setTitle("Enregistrement d'un nouvel ouvrage");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 606, 552);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		lblIsbn = new JLabel("Isbn :");
		lblIsbn.setHorizontalAlignment(SwingConstants.RIGHT);
		lblIsbn.setBounds(29, 34, 61, 15);
		contentPane.add(lblIsbn);
		
		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(168, 32, 141, 19);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);
		
		lblTitre = new JLabel("Titre :");
		lblTitre.setHorizontalAlignment(SwingConstants.RIGHT);
		lblTitre.setBounds(29, 67, 61, 15);
		contentPane.add(lblTitre);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setBounds(168, 65, 225, 19);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		//enregistrer l'ouvrage (sans auteurs ni mots cles)
		buttonEnreg = new JButton("Enregistrer");
		buttonEnreg.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				isbn = textFieldIsbn.getText();
				String titre = textFieldTitre.getText();
				String editeur = textFieldEditeur.getText();
				String dateEdition = textFieldDate.getText();
				getControleur().nouvOuvrage(isbn, titre, editeur, dateEdition);
				}
		});
		buttonEnreg.setBounds(168, 173, 107, 25);
		contentPane.add(buttonEnreg);
		
		//annuler avant de créer l'auteur
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieOuvrage.this);}
		});
		buttonAnnuler.setBounds(305, 173, 107, 25);
		contentPane.add(buttonAnnuler);
			
		//ajouter un auteur
		buttonEnregistrerAuteur = new JButton("Ajouter Auteur");
		buttonEnregistrerAuteur.setEnabled(false);
		buttonEnregistrerAuteur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				nomAuteur =  textFieldNomAuteur.getText();
				prenomAuteur =  textFieldPrenomAuteur.getText();
				
				Auteur a = getControleur().rechAuteur(nomAuteur, prenomAuteur);
				
				if (a == null){
					a = new Auteur(nomAuteur, prenomAuteur);
					getControleur().setAuteur(a);
				}
				Ouvrage ouvrage = getControleur().getOuvrage(isbn);
				
				String key = a.getNom()+a.getPrenom();
				if (ouvrage.getAuteurs().containsKey(key)){
					Message dialog1 = new Message("L'auteur " + a.getNom()+ " " + a.getPrenom() + " a déjà été ajouté");
					dialog1.setVisible(true);
				}
				else{
					getControleur().ajouterOuvrageAuteur(ouvrage, a);
					Message dialog = new Message("L'auteur " + a.getNom()+ " " + a.getPrenom() + " a bien été ajouté");
					dialog.setVisible(true);
				}
				textFieldPrenomAuteur.setText("");
				textFieldNomAuteur.setText("");
			}
		});
		
		buttonEnregistrerAuteur.setBounds(305, 277, 198, 25);
		contentPane.add(buttonEnregistrerAuteur);
		
		

		//passer aux mots-clés
		buttonEtapeSuivante = new JButton("Etape Suivante");
		buttonEtapeSuivante.setEnabled(false);
		buttonEtapeSuivante.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(getControleur().getOuvrage(isbn).getAuteurs().isEmpty()){ // Si l'on n'a pas ajouté d'Auteur...
					Message dialog = new Message("Ajoutez au moins un auteur.");
					dialog.setVisible(true);
				}
				else{
					setEtat(inter2);
				}
			}
	    });

		buttonEtapeSuivante.setBounds(305, 313, 141, 25);
		contentPane.add(buttonEtapeSuivante);
		
		
		
		//ajouter un mot cle
		buttonEnregistrerMotCl = new JButton("Ajouter Mot-clé");
		buttonEnregistrerMotCl.setEnabled(false);
		buttonEnregistrerMotCl.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String val = (String)comboBoxMotCle.getSelectedItem();
				getControleur().nouvMotcle(val, getControleur().getOuvrage(isbn));
			}
		});
		buttonEnregistrerMotCl.setBounds(305, 408, 198, 25);
		contentPane.add(buttonEnregistrerMotCl);
		
		
		buttonFermer = new JButton("Fermer");
		buttonFermer.setEnabled(false);
		buttonFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(getControleur().getOuvrage(isbn).getMotCles().isEmpty()){ // Si l'on n'a pas ajouté de mot-clé...
					Message dialog = new Message("Ajoutez au moins un mot-clé avant de quitter.");
					dialog.setVisible(true);
				}
				else{
					getControleur().fermerVue(VueSaisieOuvrage.this);
				}
			}
		});
		buttonFermer.setBounds(305, 445, 107, 25);
		contentPane.add(buttonFermer);
		
		
		lblDate = new JLabel("Date édition (MM/AAAA)");
		lblDate.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDate.setBounds(0, 89, 154, 33);
		contentPane.add(lblDate);
		
		textFieldDate = new JTextField();
		textFieldDate.setBounds(168, 96, 114, 19);
		contentPane.add(textFieldDate);
		textFieldDate.setColumns(10);

		lblAuteur = new JLabel("Auteur :");
		lblAuteur.setEnabled(false);
		lblAuteur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblAuteur.setBounds(29, 287, 61, 15);
		contentPane.add(lblAuteur);
		
		
		lblEditeur = new JLabel("Editeur :");
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblEditeur.setBounds(29, 134, 61, 15);
		contentPane.add(lblEditeur);
		
		textFieldEditeur = new JTextField();
		textFieldEditeur.setColumns(10);
		textFieldEditeur.setBounds(168, 132, 218, 19);
		contentPane.add(textFieldEditeur);
		
		textFieldPrenomAuteur = new JTextField();
		textFieldPrenomAuteur.setEnabled(false);
		textFieldPrenomAuteur.setColumns(10);
		textFieldPrenomAuteur.setBounds(168, 316, 94, 19);
		contentPane.add(textFieldPrenomAuteur);
		
		textFieldNomAuteur = new JTextField();
		textFieldNomAuteur.setEnabled(false);
		textFieldNomAuteur.setColumns(10);
		textFieldNomAuteur.setBounds(168, 285, 94, 19);
		contentPane.add(textFieldNomAuteur);
		
		lblNom = new JLabel("Nom");
		lblNom.setEnabled(false);
		lblNom.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNom.setBounds(93, 287, 61, 15);
		contentPane.add(lblNom);
		
		lblPrnom = new JLabel("Prénom");
		lblPrnom.setEnabled(false);
		lblPrnom.setHorizontalAlignment(SwingConstants.RIGHT);
		lblPrnom.setBounds(93, 318, 61, 15);
		contentPane.add(lblPrnom);
		
		lblMotsCl = new JLabel("Mot Clé :");
		lblMotsCl.setEnabled(false);
		lblMotsCl.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMotsCl.setBounds(0, 413, 86, 15);
		contentPane.add(lblMotsCl);
	
		
		JSeparator separator = new JSeparator();
		separator.setBounds(377, 220, -270, -16);
		contentPane.add(separator);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(93, 237, 418, 2);
		contentPane.add(separator_1);
		
		JSeparator separator_2 = new JSeparator();
		separator_2.setBounds(89, 364, 414, -6);
		contentPane.add(separator_2);
		
		JSeparator separator_3 = new JSeparator();
		separator_3.setBounds(89, 364, 422, 2);
		contentPane.add(separator_3);
		
		comboBoxMotCle = new JComboBox();
		comboBoxMotCle.setBounds(98, 408, 177, 25);
		contentPane.add(comboBoxMotCle);
		
	} // Fin fenêtre
	
	
	//Methodes
	
	//alimente la combobox des mots-cles
	public void alimente(HashSet<MotCle> mots) {
			if (mots==null)
			{ 
				Message dialog = new Message("La liste de mots-cles est vide");
				dialog.setVisible(true);
			}
			else
			{
				for (MotCle m : mots) comboBoxMotCle.addItem(m.getMot());
			}
	}
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale: // on saisit les infos du libre
			
	
			buttonEnreg.setEnabled(true);
			buttonAnnuler.setEnabled(true);


			
			textFieldIsbn.setEnabled(true);
			textFieldTitre.setEnabled(true);
			textFieldDate.setEnabled(true);
		    textFieldEditeur.setEnabled(true);
		    
			lblIsbn.setEnabled(true);
			lblTitre.setEnabled(true);	
			lblDate.setEnabled(true);
			lblEditeur.setEnabled(true);

			buttonEnregistrerAuteur.setEnabled(false);
			buttonEtapeSuivante.setEnabled(false);
			buttonEnregistrerMotCl.setEnabled(false);
			buttonFermer.setEnabled(false);
			
			textFieldPrenomAuteur.setEnabled(false);
			textFieldNomAuteur.setEnabled(false);
			comboBoxMotCle.setEnabled(false);
			
			lblAuteur.setEnabled(false);
			lblNom.setEnabled(false);
			lblPrnom.setEnabled(false);
			lblMotsCl.setEnabled(false);
			break;
			
		case inter1: // on saisit les auteurs
			
			
			buttonEnreg.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			buttonEnregistrerAuteur.setEnabled(true);
			buttonEtapeSuivante.setEnabled(true);
			buttonEnregistrerMotCl.setEnabled(false);
			buttonFermer.setEnabled(false);

			
			textFieldIsbn.setEnabled(false);
			textFieldTitre.setEnabled(false);
			textFieldDate.setEnabled(false);
		    textFieldEditeur.setEnabled(false);
		    
			lblIsbn.setEnabled(false);
			lblTitre.setEnabled(false);	
			lblDate.setEnabled(false);
			lblEditeur.setEnabled(false);

			
			textFieldPrenomAuteur.setEnabled(true);
			textFieldNomAuteur.setEnabled(true);
			comboBoxMotCle.setEnabled(false);
			
			lblAuteur.setEnabled(true);
			lblNom.setEnabled(true);
			lblPrnom.setEnabled(true);
			lblMotsCl.setEnabled(false);
			break;
		
		
		case inter2 : // on saisit les mot-clés
			
			
			
			buttonEnreg.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			buttonEnregistrerAuteur.setEnabled(false);
			buttonEtapeSuivante.setEnabled(false);
			buttonEnregistrerMotCl.setEnabled(true);
			buttonFermer.setEnabled(true);

			
			textFieldIsbn.setEnabled(false);
			textFieldTitre.setEnabled(false);
			textFieldDate.setEnabled(false);
		    textFieldEditeur.setEnabled(false);
		    
			lblIsbn.setEnabled(false);
			lblTitre.setEnabled(false);	
			lblDate.setEnabled(false);
			lblEditeur.setEnabled(false);

			
			textFieldPrenomAuteur.setEnabled(false);
			textFieldNomAuteur.setEnabled(false);
			comboBoxMotCle.setEnabled(true);
			
			lblAuteur.setEnabled(false);
			lblNom.setEnabled(false);
			lblPrnom.setEnabled(false);
			lblMotsCl.setEnabled(true);
			
			
			break;
		}
	}
	}
